package example;

import interfacesFerrovia.DefsGlobais.TipoAtributo;

import java.util.Set;

import malhaFerroviaria.Ferrovia;

/**
 * Exemplo de uso dos comandos da ferrovia para acesso aos
 * elementos de um cen�rio e seus atributos.
 * @author Vanini
 *
 */

public class Exemplo2 {
	
	/**
	 * Mostra um atributo na sa�da padr�o
	 * @param attr   Atributo
	 * @param valor  Valor
	 */
	static void mostraAtributo(TipoAtributo attr, Object valor){
		System.out.print("     "+attr+"::");
		if(valor != null){
			if(valor instanceof String[]){
				System.out.print("[");
				for(String id:(String[])valor) System.out.print(id+",");
				System.out.println("]");
			} else System.out.println(""+valor);
		}
		else System.out.println("?null?");
	}
	
	/**
	 * Consulta os atributos de um elemento da ferrovia.
	 * @param f   Refer�ncia � ferrovia.
	 * @param id  Id do elemento consultado.
	 */
	static void consultaAtributos(Ferrovia f,String id){
		Set<TipoAtributo> s = f.consultaListaDeAtributos(id);
		System.out.println("===== "+id+" =====");
		for(TipoAtributo attr:s) mostraAtributo(attr,f.consultaAtributo(id, attr)); 
	}

	/**
	 * Consulta a todos os atributos (publicados) de todos os 
	 * elementos da ferrovia.
	 * @param f
	 */
	static void consultaGeral(Ferrovia f){
		String[] ids = f.consultaElementos();
		System.out.print("Id's dos elementos: [ ");
		for(String id:ids) System.out.print(id+" ");
		System.out.println("]");
		for(String id:ids) consultaAtributos(f,id);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// 1 - Pegar a inst�ncia �nica da Ferrovia
		Ferrovia ferrovia = Ferrovia.getInstance();
		
		// 2 - Definir um cen�rio para a simula��o
		ferrovia.defineCenario(7);
		
		// 2.1 - Consulta cada um dos elementos da ferrovia 
		consultaGeral(ferrovia);
		
		System.out.println("*=*=*= Fim =*=*=*");

	}

}
